–Dave: One of the key hypotheses is that profits (mark-ups) will be less responsive in the 2p game (because of collusion). Could you compute the mean (and median) for each period for each pair (or group), i.e. average across all the rounds. For each of those periods observations we’ll have a transport cost. What I’d like to do is log that data then run a regression of ln(profit)= a0 + a1*ln(transport cost)+ (a2 * 2p) + (a3 * 2p * ln(transport cost)), where 2p is a dummy for 2p periods. I think this is the correct equation.. Essentially, I want to estimate the elasticity of profits to transport costs and see if that is higher for 4p sessions. We should expect a1 to be positive and a3 to be negative, if my hypotheses are correct…–
Above is the distribution of round profits. Where round profits is the mean profit of one subject in one period (at a fixed transport cost and number of counterparts).
However, we have a problem. Profit and transport costs are between 0 and 1. Log profit is not possible without omitting observations (introducing bias) or other manipulations.
I transform profit by adding an insignificant quantity (0.01) to all observations, and multiplying that by 10000.
This produces the following distribution of observed profits;
With this transformation to profit, we have the following regression.
##
## Call:
## lm(formula = log_profit ~ log(player.transport_cost) + twoPlayer +
## twoPlayer:log(player.transport_cost), data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.50639 -0.25709 -0.04077 0.24720 1.87950
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.44720 0.03306 194.987 < 2e-16
## log(player.transport_cost) 0.48422 0.02731 17.733 < 2e-16
## twoPlayer 0.77865 0.05228 14.894 < 2e-16
## log(player.transport_cost):twoPlayer -0.23764 0.04317 -5.504 6.07e-08
##
## (Intercept) ***
## log(player.transport_cost) ***
## twoPlayer ***
## log(player.transport_cost):twoPlayer ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4125 on 476 degrees of freedom
## Multiple R-squared: 0.6798, Adjusted R-squared: 0.6778
## F-statistic: 336.9 on 3 and 476 DF, p-value: < 2.2e-16
With issues in transforming profit in mind, we have the above regression results. If we hadn’t transformed profit and been able to run a regular log-log regression with your specification, we would interpret \(\beta_3\) as “the 2-player game, a one unit increase in transport cost decreases profit by 23% compared to the 4-player game” (if my interpretation is correct).
Additional regressions:
##
## Call:
## lm(formula = stdz_profit ~ log(player.transport_cost) + twoPlayer +
## twoPlayer:log(player.transport_cost), data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.6466 -0.5758 -0.1649 0.3356 4.0475
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.97723 0.06883 28.728 < 2e-16
## log(player.transport_cost) 0.67358 0.05684 11.851 < 2e-16
## twoPlayer 0.43323 0.10882 3.981 7.93e-05
## log(player.transport_cost):twoPlayer -0.28088 0.08987 -3.125 0.00188
##
## (Intercept) ***
## log(player.transport_cost) ***
## twoPlayer ***
## log(player.transport_cost):twoPlayer **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.8587 on 476 degrees of freedom
## Multiple R-squared: 0.3362, Adjusted R-squared: 0.332
## F-statistic: 80.37 on 3 and 476 DF, p-value: < 2.2e-16
A regression with normalized profit is statistically significant, and has similar results as the price-transformed log-log.
Now we would interpret \(\beta_3\) as “the 2-player game, a one unit increase in transport cost decreases profit by 0.23 standard deviations compared to the 4-player game” (if my interpretation is correct, that could probably be said better).
##
## Call:
## lm(formula = profit ~ log(player.transport_cost) + twoPlayer +
## twoPlayer:log(player.transport_cost), data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.07557 -0.02045 -0.00580 0.01095 0.19876
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.055477 0.002952 18.793 < 2e-16
## log(player.transport_cost) 0.018900 0.002438 7.752 5.51e-14
## twoPlayer 0.076371 0.004668 16.362 < 2e-16
## log(player.transport_cost):twoPlayer 0.002581 0.003855 0.670 0.503
##
## (Intercept) ***
## log(player.transport_cost) ***
## twoPlayer ***
## log(player.transport_cost):twoPlayer
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.03683 on 476 degrees of freedom
## Multiple R-squared: 0.5493, Adjusted R-squared: 0.5464
## F-statistic: 193.4 on 3 and 476 DF, p-value: < 2.2e-16
A Regular level-log regression has player.transport_cost:twoPlayer is insignificant.
–Dave: How did you measure collusion in your other Hotellings work? I’d like to know if “collusion” is higher in 2p sessions and, if it’s higher in low transport cost periods, in both 2p and 4p. Looking at the second figure for 2p, it looks like the profits that are much higher than the bulk of the mass (which is suggestive of collusion), and this happens more frequently at low transport costs. You see the same sort of pattern in the second figure in 4p, but more less prevalent. Visually, it seems suggestive of these additional hypotheses.–
We had a few measures of collusion. Since we had a continuous time data, we looked at how subjects responded to others’ action selection. E.g., (in the price and location Hotelling setting), when a player did change their action, did they move location and price in a way that opened up the possibility of getting higher joint profit (which usually meant reducing one’s profit)? Or did they act “competitively”, increasing own profit at expense of counterparty? As another measure of collusion, if there were joint positive profits, did players remain stationary?
Collusion Metrics:
Regarding your observation that looking at profit and transport costs, the very low transport cost treatments had lower than average profit, but had a few observations with very high profit. Isn’t this more a “technical artifact” (probably not the right term…), where with t = 0.1 if your opponent has high prices, a slightly lower price will seriously undercut them and capture a large portion of the market. Whereas with high transport cost, you need to be seriously below your opponent to undercut their price and capture serious market share. So, it would seem to me that there are a few cases with low transport costs where a “good” player was up against a careless one, and in that period the good player earned the rare, very high profit that period.
Sessions run so far,
| session.code | n_subjects | date |
|---|---|---|
| e6zctbfm | 10 | 2017-02-08 19:52:36.968156+00:00 |
| vtfqykgg | 6 | 2017-02-09 19:46:26.598872+00:00 |
A fairly clear story here. The figure below plots average payoffs for each session. This averages payoffs over all subject in all periods within one session.
Note that the transport cost of 0.25 had an error in its implementation. In 0.25 transport cost periods, subjects only had 5 subperiods, not the 20 all other periods had. This most likely explains the odd result.
In the table below I compare average payoff between transport cost treatments, at the session level.
The standard errors are probably not the way you want to do it. I’m using every observation from each subperiod of each period. We probably want to compare average payoffs per period or per session. But still…
| player.transport_cost | n | mean_profit | median_profit | se_profit |
|---|---|---|---|---|
| 0.10 | 960 | 0.0875815 | 0.0350000 | 0.0036772 |
| 0.25 | 240 | 0.0981567 | 0.0799500 | 0.0064890 |
| 0.50 | 960 | 0.0986849 | 0.0900000 | 0.0022796 |
| 0.75 | 960 | 0.1281301 | 0.1170667 | 0.0023177 |
| 1.00 | 960 | 0.1424673 | 0.1353250 | 0.0020214 |
Now, below, we calculate standard error with mean payoffs at the session+period+transport cost level.
There are far fewer observations, making our standard error much larger. However, still, the very low transport cost are significantly different from the two transport costs in the high range.
| player.transport_cost | n | mean_profit_ | se_profit |
|---|---|---|---|
| 0.10 | 6 | 0.0945531 | 0.0133701 |
| 0.25 | 6 | 0.0999280 | 0.0085969 |
| 0.50 | 6 | 0.1023566 | 0.0094255 |
| 0.75 | 6 | 0.1298086 | 0.0068505 |
| 1.00 | 6 | 0.1472174 | 0.0103132 |
Looking at distributions in another way,
Below, we have the distribution of all subperiod/round profits. Within each transport costs group, colors represent a single period. We see remarkably consistent distributions of profit within transport-cost groups, and noticeably different distributions between transport cost groups.
Now, we see the distribution of profits over each transport costs, averaged over a given session+period (less granular than above).
To summarize a little:
The lower the transport cost the lower the profit to the subject.
There is a clear and likely statistically significant difference between average payoffs (our proxy for cooperation rates) between low transport cost t = 0.1 and high t = 1.0.
The difference between t = 1.0 and t = 0.75 does not yet appear to be significant.
There does not appear to be any period effect. I suspected that perhaps in later periods we’d see consistently lower or higher levels of cooperations/payoffs. That does not appear to be the case
How do prices related to transport cost? How does price stickiness related to transport cost?
The figure below plots prices for each session. This averages payoffs over all subject in all periods within one transport cost treatment group.
We see a generally positive relationship between prices and transport costs.
Note that the transport cost of 0.25 had an error in its implementation. In 0.25 transport cost periods, subjects only had 5 subperiods, not the 20 all other periods had. This most likely explains the odd result.
In the table below I compare average price between transport cost treatments, at the session level.
The standard errors are probably not the way you want to do it. I’m using every observation from each subperiod of each period. We probably want to compare average payoffs per period or per session. But still…
| player.transport_cost | n | mean_price | median_price | se_price |
|---|---|---|---|---|
| 0.10 | 960 | 0.4487188 | 0.405 | 0.0098613 |
| 0.25 | 240 | 0.4959167 | 0.470 | 0.0176038 |
| 0.50 | 960 | 0.4615833 | 0.420 | 0.0076664 |
| 0.75 | 960 | 0.5660937 | 0.520 | 0.0081746 |
| 1.00 | 960 | 0.6249167 | 0.590 | 0.0079651 |
Prices in the t = 1.0 transport cost treatment were on average \(0.1761979\) or \(39.15\)% higher compared to t = 0.1.
Now, below, we calculate standard error with mean prices at the session+period+transport cost level.
There are far fewer observations, making our standard error much larger. However, still, the very low transport cost are significantly different from the two transport costs in the high range.
| player.transport_cost | n | se_price | mean_price |
|---|---|---|---|
| 0.10 | 6 | 0.0525694 | 0.4757694 |
| 0.25 | 6 | 0.0329879 | 0.5058000 |
| 0.50 | 6 | 0.0402877 | 0.4771778 |
| 0.75 | 6 | 0.0205684 | 0.5723750 |
| 1.00 | 6 | 0.0369182 | 0.6425889 |
Comparing prices in t = 0.1 and t = 1.0 (see below), there appears to be a statistically significant difference.
##
## Welch Two Sample t-test
##
## data: mean_price[player.transport_cost == 0.1] and mean_price[player.transport_cost == 1]
## t = -4.4084, df = 88.447, p-value = 2.918e-05
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -0.25562210 -0.09677373
## sample estimates:
## mean of x mean of y
## 0.4487187 0.6249167
## Warning in wilcox.test.default(mean_price[player.transport_cost == 0.1], :
## cannot compute exact p-value with ties
##
## Wilcoxon rank sum test with continuity correction
##
## data: mean_price[player.transport_cost == 0.1] and mean_price[player.transport_cost == 1]
## W = 645, p-value = 0.0002061
## alternative hypothesis: true location shift is not equal to 0
Summary of relationship between transport costs and prices. There is a relationship between prices and transport cost treatments. In higher transport cost settings subjects tended to have higher prices.
Considering price stickiness as:
Looking at the standard deviation of prices (below), there does not appear to be a strong relationship between price variation and transport cost.
Below, we look at the magnitutde of changes in price between subperiods. One dot represents the average price change (in absolute value) for one player, in one period. There does not appear to be a significant relationship between this measure of price stickiness and transport cost treatment.
Below, we see the percent of times subjects change price between subperiods. As a reminder, each period is divided into a number of subperiods. If a subject does nothing with his or her experiment controls between subperiods, prices remain unchanged. Subjects must actively click to change prices between subperiods.
The percent plotted below indicated the percent of times subjects change their price between periods. A score of zero indicated the subject never changed prices. A score of 100% indicates that person changes prices between every subperiod.
Again, we see weak evidence that prices are slightly more sticky in high transport cost settings.
## # A tibble: 5 x 4
## player.transport_cost n price_chr_prct_mean price_chr_prct_median
## <dbl> <int> <dbl> <dbl>
## 1 0.100 48 88.2 92.1
## 2 0.250 48 88.5 100
## 3 0.500 48 85.0 92.1
## 4 0.750 48 76.9 89.5
## 5 1.00 48 76.1 84.2
Keep in mind, where the max score one could earn in the two-player game is 0.5 (if both players go to the Pareto superior equilibrium, or in the unlikely event that one player is at the max price and the other undercuts him at price = 0.5), in the four player game the max score one could get, I think, is 0.25. This price occurs were all players have the highest price possible.
It is possible that some players do earn above 0.25 if, in the unlikely event that they manage to undercut other players for many subperiods in the very-low transport cost world.
How player profits relate to transport cost at the very high, session level?
A very clear story, I think. The figure below plots average payoffs for each session. This averages payoffs over all subject in all periods within one session.
| player.transport_cost | n | mean_profit | median_profit | se_profit |
|---|---|---|---|---|
| 0.10 | 1440 | 0.0129521 | 0.0060 | 0.0007968 |
| 0.25 | 1440 | 0.0244524 | 0.0170 | 0.0010780 |
| 0.50 | 1440 | 0.0388499 | 0.0315 | 0.0011586 |
| 0.75 | 1440 | 0.0505971 | 0.0462 | 0.0011680 |
| 1.00 | 1440 | 0.0574560 | 0.0540 | 0.0011470 |
The standard errors in the table above are likely way too generous. Below, the same table, but only averaging over subject+period+transport-cost.
If things hold up, we’d get a statistically significant difference between 0.1 and 1.0, and possibly between smaller increments of transport cost.
| player.transport_cost | n | mean_profit_ | se_profit |
|---|---|---|---|
| 0.10 | 6 | 0.0129521 | 0.0023800 |
| 0.25 | 6 | 0.0244524 | 0.0027642 |
| 0.50 | 6 | 0.0388499 | 0.0032211 |
| 0.75 | 6 | 0.0505971 | 0.0035959 |
| 1.00 | 6 | 0.0574560 | 0.0046760 |
Now, looking at the very granular subject, period level,
Looking more closely at the distributions, (below) we see;
basically, the t = 0.1 was profitless for subjects.
the t = 0.25 world was pretty close to unprofitable.
the t = 0.75 and t = 1.0 worlds were consistently in the profitable range.
The distributions here are derived from a player’s final score in the period.
Below, looking at these distrubtions with a more grandular view. Here we look at all observations of all payoffs, including those within a period.
It more clearly shows that in all of these worlds, people do spend a lot of time at zero payoffs.
I drop t = 0.1 because they are basically all at zero payoffs.
How do prices related to transport cost? How does price stickiness related to transport cost?
The figure below plots prices for each session. This averages payoffs over all subject in all periods within one transport cost treatment group.
We see a generally positive relationship between prices and transport costs.
In the table below I compare average price between transport cost treatments, at the session level.
The standard errors are probably not the way you want to do it. I’m using every observation from each subperiod of each period. We probably want to compare average payoffs per period or per session. But still…
| player.transport_cost | n | mean_price | median_price | se_price |
|---|---|---|---|---|
| 0.10 | 1440 | 0.1705972 | 0.05 | 0.0068340 |
| 0.25 | 1440 | 0.1815278 | 0.10 | 0.0055909 |
| 0.50 | 1440 | 0.2400764 | 0.19 | 0.0050648 |
| 0.75 | 1440 | 0.2859444 | 0.26 | 0.0046222 |
| 1.00 | 1440 | 0.3164861 | 0.30 | 0.0049007 |
Prices in the t = 1.0 transport cost treatment were on average \(0.146\) or \(85.82\)% higher compared to t = 0.1.
Now, below, we calculate standard error with mean prices at the session+period+transport cost level.
There are far fewer observations, making our standard error much larger. However, still, the very low transport cost are significantly different from the two transport costs in the high range.
| player.transport_cost | n | se_price | mean_price |
|---|---|---|---|
| 0.10 | 6 | 0.0249646 | 0.1705972 |
| 0.25 | 6 | 0.0266817 | 0.1815278 |
| 0.50 | 6 | 0.0232037 | 0.2400764 |
| 0.75 | 6 | 0.0236542 | 0.2859444 |
| 1.00 | 6 | 0.0272160 | 0.3164861 |
Comparing prices in t = 0.1 and t = 1.0 (see below), there appears to be a statistically significant difference.
##
## Welch Two Sample t-test
##
## data: mean_price[player.transport_cost == 0.1] and mean_price[player.transport_cost == 1]
## t = -5.4696, df = 127.71, p-value = 2.285e-07
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -0.19866656 -0.09311122
## sample estimates:
## mean of x mean of y
## 0.1705972 0.3164861
##
## Wilcoxon rank sum test with continuity correction
##
## data: mean_price[player.transport_cost == 0.1] and mean_price[player.transport_cost == 1]
## W = 1030.5, p-value = 4.458e-10
## alternative hypothesis: true location shift is not equal to 0
## # A tibble: 5 x 2
## player.transport_cost n
## <dbl> <int>
## 1 0.100 72
## 2 0.250 72
## 3 0.500 72
## 4 0.750 72
## 5 1.00 72
Summary of relationship between transport costs and prices. There is a relationship between prices and transport cost treatments. In higher transport cost settings subjects tended to have higher prices.
Considering price stickiness as:
Looking at the standard deviation of prices (below), there does not appear to be a strong relationship between price variation and transport cost.
Below, we look at the magnitutde of changes in price between subperiods. One dot represents the average price change (in absolute value) for one player, in one period. There does not appear to be a significant relationship between this measure of price stickiness and transport cost treatment.
## # A tibble: 5 x 4
## player.transport_cost n price_mean_chg_abs_sd price_mean_chg_abs
## <dbl> <int> <dbl> <dbl>
## 1 0.100 72 0.101 0.0880
## 2 0.250 72 0.0753 0.0903
## 3 0.500 72 0.0475 0.0813
## 4 0.750 72 0.0691 0.115
## 5 1.00 72 0.0756 0.116
Below, we see the percent of times subjects change price between subperiods. As a reminder, each period is divided into a number of subperiods. If a subject does nothing with his or her experiment controls between subperiods, prices remain unchanged. Subjects must actively click to change prices between subperiods.
The percent plotted below indicated the percent of times subjects change their price between periods. A score of zero indicated the subject never changed prices. A score of \(100\)% indicates that person changes prices between every subperiod.
Again, we see weak evidence that prices are slightly more sticky in high transport cost settings.
## # A tibble: 5 x 4
## player.transport_cost n price_chr_prct_mean price_chr_prct_median
## <dbl> <int> <dbl> <dbl>
## 1 0.100 72 70.2 73.7
## 2 0.250 72 85.4 92.1
## 3 0.500 72 83.4 89.5
## 4 0.750 72 86.5 94.7
## 5 1.00 72 85.4 92.1
The period affect, if present, is dominated by transport costs all being the same at certain periods.
First off note that in the two-player game, the most you can possible earn is 0.5. In the four-player game if all players set prices at their max they would each earn 0.25.
–Dave: These results look great. So, it looks like we have pretty robust results for one of our hypotheses (transport costs and profits (mark-ups) from these pilots. The other questions are mostly to do with how the results change for the 2p vs. 4p games. If it’s relatively easy, could you generate those same plots, but where you stack the 2p and 4p images on top of each other so it’s easier to visually compare? Right now I’m trying to scroll back and forth to compare and it’s not working too well! –
Dave: On price stickiness. I was thinking more along the lines of “price responsiveness” I suppose. i.e. that price are less responsive to shocks (changes in transport costs) in the 2p sessions. We could run the same regression above, but with price, but I think we should get the same result, since profit essentially equals price here (not exactly, of course). This is related to price stickiness because if prices are less responsive, for whatever reason, monetary policy will have a greater impact. I guess I’m less interested in the within round movements in price, I just sort of view that as experimentation. One thing that I think may be interesting is to look at how price changes change as rounds go on. i.e. do the changes become less extreme later in a period and does this vary across transport costs. Again, the metrics on price stickiness you create and think are interesting, but could you do them for a 2p vs. 4p comparison? I think that comparison is much more interesting. I think we should keep the transport cost ones, but I’d also like to add the 2p vs. 4p comparison.
##
## Call:
## lm(formula = log(price) ~ log(player.transport_cost) + twoPlayer +
## twoPlayer:log(player.transport_cost), data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.77125 -0.28878 -0.02919 0.30142 2.04784
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.22448 0.04226 -28.977 < 2e-16
## log(player.transport_cost) 0.44403 0.03490 12.724 < 2e-16
## twoPlayer 0.64726 0.06681 9.687 < 2e-16
## log(player.transport_cost):twoPlayer -0.27135 0.05518 -4.918 1.21e-06
##
## (Intercept) ***
## log(player.transport_cost) ***
## twoPlayer ***
## log(player.transport_cost):twoPlayer ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.5272 on 476 degrees of freedom
## Multiple R-squared: 0.5082, Adjusted R-squared: 0.5051
## F-statistic: 164 on 3 and 476 DF, p-value: < 2.2e-16
Similar results to log-log with profit and transport costs.
And with normalized price,
##
## Call:
## lm(formula = stdz_price ~ log(player.transport_cost) + twoPlayer +
## twoPlayer:log(player.transport_cost), data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.8119 -0.6860 -0.2355 0.4110 4.2781
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.97554 0.07580 26.063 < 2e-16
## log(player.transport_cost) 0.39169 0.06260 6.257 8.74e-10
## twoPlayer 0.98848 0.11985 8.248 1.59e-15
## log(player.transport_cost):twoPlayer -0.05464 0.09898 -0.552 0.581
##
## (Intercept) ***
## log(player.transport_cost) ***
## twoPlayer ***
## log(player.transport_cost):twoPlayer
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.9457 on 476 degrees of freedom
## Multiple R-squared: 0.2917, Adjusted R-squared: 0.2872
## F-statistic: 65.34 on 3 and 476 DF, p-value: < 2.2e-16
The results is now insignificant.
As a measure or indication of collusion, here we use the situation in which both players have profitable positions.
There are other explainations for both players having positive profits where they are not colluding. For example, if they are attempting to undercut their competitor but accidentially allow them a profit. High transport costs also limit the ability for competitors to undercut others.
The following table shows the percent of the subperiod in which all players had at positive payoffs. We see a clear relationship between transport cost and firms ability to maintain joint positive profits.
| player.transport_cost | players | mean_jointPosProfits |
|---|---|---|
| 0.10 | 4 | 0.2083333 |
| 0.25 | 4 | 0.3055556 |
| 0.50 | 4 | 0.3055556 |
| 0.75 | 4 | 0.3611111 |
| 1.00 | 4 | 0.5055556 |
| 0.10 | 2 | 0.2895833 |
| 0.25 | 2 | 0.3916667 |
| 0.50 | 2 | 0.7166667 |
| 0.75 | 2 | 0.8333333 |
| 1.00 | 2 | 0.8916667 |
Below, I am curious how payoffs evolved as periods progressed. Were they stable, or did they tend to decline?
The plots below show the distributions of payoffs over the period. The x-axis is the subperiod, the y-axis the flow payoff.
There are jittered poits and violins to show distributions. The line shows the median over all observations in this group.
It’s hard to see, but in the two-player game, the distributions of profits are remarkably consistent between subperiods in t = 0.5, 0.75 and 1.0.
One indication of collusion is stable actions.
This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.
Compiled by Curtis Kephart, curtis.kephart@nyu.edu, 2018-03-04 11:02:58 GMT, Europe/Berlin